<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>运算符</title>
</head>

<body>
  <script>
    //T1
    //3 + 2 +“7”的结果是什么？3 + (2 + "7")的结果又是什么？这两个表达式输出的值是什么类型？
    /* 
      答：
        57，String类型
        327，String类型
    */

    //T2
    //6 - false的结果是什么？为什么

    /* 
    答：
      6
      因为布尔值类型的false值在参与减法运算是会隐式转化为数值类型的0，所以答案是6-0=6
    */

    //T3
    //6 - "false"和6 + "false"的结果分别是什么？结果输出值是什么数据类型？

    /* 
      答：
        NaN，Number类型，
        6flase，String类型
    */

    //T4
    //下面代码分别输出什么？请写出分析过程
    var a = 1;
    var b = ++a + ++a;

    /* 
      答：
        a=3,b=5
        1、变量a初始化值为1，表达式++a + ++a进行加法运算，加法运算是从左向右进行运算
        2、根据运算优先级，自增运算符优先级要比算术运算符优先级高，先运算++a，最后进行加法运算
        3、第一个前置++a的a先自增+1，++a变为2，然后返回自增后的值，这时的a=2
        4、第二个前置++a从2自增+1，++a为3，然后返回自增后的值，这时的a=3，则++a + ++a = 2+3=5，最后将表达式的结果赋值给变量b,所以b=5,a=3
    */


    //T5
    //JS中哪些值通过Boolean对象转换出来的值为false

    /* 
      答：
        数值0
        空字符串""或''
        undefined
        null
        NaN 
    */

    //T6
    //分析下面代码，写出分析过程，请问 j 和 y 分别是多少？(不要运行代码，自己分析后写出答案)
    var i = 100;
    i++;
    j = i++;
    y = ++j;
    console.log(j);
    console.log(y);


    /*
      答：
        y=102,j=102
        变量i初始化值为1，代码执行顺序由上到下
        1、先执行后置i++;自增+1，这时变量i的值为101
        2、然后执行j=i++;根据运算优先级，自增运算符优先级要比赋值运算符高，这时的i++先参与运算，i++的值为101，将其赋值给变量j，再自增，然后变量j的值为101
        3、同理，接着执行y=++j;，++j先自增+1，变量j的值变为102,然后再参与运算，将值赋值给变量y。，所以最终j=102，y=102.
    */
  </script>
</body>

</html>